/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkgMetodoPyramid.pkgReporte.pkgGraph1;

import net.sf.jasperreports.engine.JRException;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import pkgMetodoPyramid.pkgNegocio.EntityPyramid;
import pkgMetodoPyramid.pkgReporte.GestorGraphPyramid;
import pkgMetodoPyramid.pkgReporte.ProcessGraphException;
import pkgMetodoPyramid.pkgReporte.ProcessReportException;
import pkgMetodoPyramid.pkgSoporte.Constants;

/**
 *
 * @author Administrador
 */
public class GestorGraph1 extends GestorGraphPyramid {

    private enum ParametrosGrafico {

        P_NOMBRE_CATEGORIA {

            @Override
            public String toString() {
                return "Edad";
            }
        },
        P_NOMBRE_VALOR {

            @Override
            public String toString() {
                return "Cantidad";
            }
        }
    }

    public GestorGraph1() {
        super();
    }

    @Override
    public void generarGrafico() throws ProcessGraphException, JRException {
        try {
            if (getDataRptChart().getReqRespPyramid() == null || !getDataRptChart().getReqRespPyramid().poseeEntity()) {
                throw new ProcessGraphException("No existen EntityPyramid para generar el gráfico");
            }

            CategoryDataset datasetVarones = createDatasetVarones();
            CategoryDataset datasetMujeres = createDatasetMujeres();

            setChartVarones(createChartVarones(datasetVarones));
            setChartMujeres(createChartMujeres(datasetMujeres));
        } catch (ProcessGraphException ex) {
            throw new ProcessGraphException("GRAPH1 (generarGrafico)- " + ex.getMessage(), ProcessGraphException.COD_EXC_GRAPH1);
        } catch (Exception ex) {
            throw new ProcessGraphException("GRAPH1 (generarGrafico)- " + ex.getMessage(), ProcessGraphException.COD_EXC_GRAPH1);
        }
    }

    public void generarReporte() throws ProcessReportException, JRException {
        try {
            createReporte(Constants.PATH_GRAPH1);
        } catch (ProcessReportException ex) {
            throw new ProcessReportException("GRAPH1 (generarReporte)- " + ex.getMessage(), ProcessReportException.COD_EXC_REPORT1);
        } catch (Exception ex) {
            throw new ProcessReportException("GRAPH1 (generarReporte)- " + ex.getMessage(), ProcessReportException.COD_EXC_REPORT1);
        }

    }

    public double getMaxValueInterval() {
        if (getDataRptChart().getReqRespPyramid().getMaxCantVarones() > getDataRptChart().getReqRespPyramid().getMaxCantMujeres()) {
            return getDataRptChart().getReqRespPyramid().getMaxCantVarones();
        }
        return getDataRptChart().getReqRespPyramid().getMaxCantMujeres();
    }

    public double getMinValueInterval() {
        return 0;
    }

    private CategoryDataset createDatasetVarones() {
        // series
        String varones = GestorGraphPyramid.SeriesGrafico.P_SERIE_VARONES.toString();

        // create the dataset...
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        for (int i = (getDataRptChart().getReqRespPyramid().getCountEntity() - 1); i >= 0; i--) {
            EntityPyramid entity = getDataRptChart().getReqRespPyramid().getEntityPyramid(i);
            dataset.addValue(entity.getVarones(), varones, entity.getEdad());
        }

        return dataset;
    }

    private CategoryDataset createDatasetMujeres() {
        // series
        String mujeres = GestorGraphPyramid.SeriesGrafico.P_SERIE_MUJERES.toString();

        // create the dataset...
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        for (int i = (getDataRptChart().getReqRespPyramid().getCountEntity() - 1); i >= 0; i--) {
            EntityPyramid entity = getDataRptChart().getReqRespPyramid().getEntityPyramid(i);
            dataset.addValue(entity.getMujeres(), mujeres, entity.getEdad());
        }

        return dataset;
    }

    private JFreeChart createChartVarones(CategoryDataset dataset) {
        JFreeChart chart = createChart(dataset, Constants.TITULO_CHART_VARONES, ParametrosGrafico.P_NOMBRE_CATEGORIA.toString(), ParametrosGrafico.P_NOMBRE_VALOR.toString());
        personalizarChartVarones(chart);
        return chart;
    }

    private JFreeChart createChartMujeres(CategoryDataset dataset) {
        JFreeChart chart = createChart(dataset, Constants.TITULO_CHART_MUJERES, ParametrosGrafico.P_NOMBRE_CATEGORIA.toString(), ParametrosGrafico.P_NOMBRE_VALOR.toString());
        personalizarChartMujeres(chart);
        return chart;
    }
}
